﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

public partial class WachtwoordWijzigen : System.Web.UI.Page
{
    private SqlCommand cmd;
    private SqlDataReader reader;

    protected void Page_Load(object sender, EventArgs e)
    {
        // Controleer of gebruiker is ingelogd
        if (!IsPostBack && Request.Cookies["InHollandAir"] == null)
            Response.Redirect("Login.aspx");
        
    }
    protected void btn_nieuw_wachtwoord_Click(object sender, EventArgs e)
    {
        wijzigWachtwoord();
    }

    private void wijzigWachtwoord()
    {
        try
        {
            // gevraagde email adres naar de database sturen voor controle
            cmd = new SqlCommand(sp.getPersoonFromEmail, ConnectDB._Connection);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParm = cmd.Parameters.Add("@Emailadres", SqlDbType.VarChar);
            myParm.Value = txt_email.Text;
            ConnectDB._Connection.Open();
            reader = cmd.ExecuteReader();
            
            nieuwWachtwoord();
            

        }
        catch (SqlException e)
        {
            lbl_foutmelding.Text = Fout.databaseOffline;
            LogError.writeToLogFile(e.Message);
        }
        finally
        {
            reader.Close();
            ConnectDB._Connection.Close();
        }
    }

    private void nieuwWachtwoord()
    {

        if (reader.Read())
        {
            lbl_foutmelding.Text = "";
            // Check of email bestaat
            if (txt_email.Text.ToLower().Trim() == reader["Emailadres"].ToString())
            {
                string oudWachtwoordHashed = SHA.generateHash(txt_oudWachtwoord.Text.Trim(), reader["Salt"].ToString());
                // Check of wachtwoorden overeen komen
                if (txt_email.Text.ToLower().Trim() == reader["Emailadres"].ToString() && oudWachtwoordHashed == reader["Wachtwoord"].ToString())
                {

                    DateTime expireDate = (DateTime)reader["VerloopTijd"];
                    TimeSpan elapsedTime = DateTime.Now.Subtract(expireDate);
                    const int MAX_TIME = 30;
                    // Check of wachtijd niet verstreken is
                    if ((bool)reader["WijzigVerplicht"] == true && elapsedTime.Minutes >= MAX_TIME)
                    {
                        lbl_foutmelding.Text = Fout.wachtwoordVerlopen;
                    }
                    else
                    {
                        // wachtwoorden wijzigen
                        Response.Write(elapsedTime);
                        Response.Write(elapsedTime.Minutes);


                        string salt = RandomString.Generate(16, 20);
                        string hashPassword = SHA.generateHash(txt_wachtwoord.Text.Trim(), salt);
                        try
                        {
                            if (ConnectDB._Connection.State == ConnectionState.Open)
                                ConnectDB._Connection.Close();
                            ConnectDB._Connection.Open();
                            cmd = new SqlCommand(sp.setNieuwWachtwoord, ConnectDB._Connection);
                            cmd.CommandType = CommandType.StoredProcedure;

                            string email = txt_email.Text;

                            SqlParameter eMailParm = cmd.Parameters.Add("@Emailadres", SqlDbType.VarChar);
                            SqlParameter wachtwoordParm = cmd.Parameters.Add("@Wachtwoord", SqlDbType.VarChar);
                            SqlParameter saltParm = cmd.Parameters.Add("@Salt", SqlDbType.VarChar);
                            SqlParameter expDateParm = cmd.Parameters.Add("@Expire", SqlDbType.DateTime);
                            SqlParameter mustChange = cmd.Parameters.Add("@Change", SqlDbType.Bit);

                            eMailParm.Value = email;
                            wachtwoordParm.Value = hashPassword;
                            saltParm.Value = salt;
                            expDateParm.Value = DateTime.Now;
                            mustChange.Value = false;

                            cmd.ExecuteNonQuery();
                            Response.Redirect("Login.aspx");
                        }
                        catch (SqlException ex)
                        {
                            LogError.writeToLogFile(ex.Message);
                        }
                        finally
                        {
                            ConnectDB._Connection.Close();
                        }
                    }
                }
                // fout afhandeling
                else
                    lbl_foutmelding.Text = Fout.foutieveInvoer;
            }
            else
                lbl_foutmelding.Text = Fout.algemeen;
        }
        else
            lbl_foutmelding.Text = Fout.foutieveInvoer;
    }
}
